// Decompiled by DJ v2.3.3.38 Copyright 2000 Atanas Neshkov  Date: 03/11/2007 6:44:22
// Home Page : http//members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   MasterConnection.java

package ig.formato.util;

import ig.formato.dto.ConexionDTO;
import ig.formato.dto.SgbdDTO;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.sql.*;
//            LoadProperties, TripleDESEncryption

public class MasterConnection {

    public MasterConnection() {
        conectionMaster = null;
    }

    private SgbdDTO cargarConfiguracion(String select) throws NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException, Exception {
        java.util.Properties pro = ig.formato.conection.util.LoadProperties.loadPropertiess("conf/igformato.properties");
        SgbdDTO sdto = new SgbdDTO();
        sdto.setDriver(pro.getProperty("driver" + select));
        sdto.setUrl(pro.getProperty("url" + select));
        sdto.setPuerto(Integer.valueOf(pro.getProperty("puerto" + select)));
        return sdto;
    }

    public Connection getConnection() throws IGFormatoException {
        try {
            if (conectionMaster == null || conectionMaster.isClosed()) {
                java.util.Properties pro = ig.formato.conection.util.LoadProperties.loadPropertiess("conf/igformato.properties");
                String select = pro.getProperty("select");
                SgbdDTO sgbdDTO = this.cargarConfiguracion(select);
                Class.forName(sgbdDTO.getDriver());
                ConexionDTO _dto = new ConexionDTO();

                _dto.setHost(pro.getProperty("server"));
                _dto.setPuerto(Integer.valueOf(pro.getProperty("puerto")));
                _dto.setBaseDeDatos(pro.getProperty("db"));
                _dto.setUsuario(pro.getProperty("usuario"));
                _dto.setClave(ig.formato.util.TripleDESEncryption.decrypt(pro.getProperty("clave"), "informaciongerencial.com"));
                String URL = sgbdDTO.getUrl().replaceAll("<host>", _dto.getHost()).replaceAll("<puerto>", _dto.getPuerto().toString()).replaceAll("<db>", _dto.getBaseDeDatos());
                conectionMaster = DriverManager.getConnection(URL, _dto.getUsuario(), _dto.getClave());
            }
            return conectionMaster;
        } catch (NoSuchAlgorithmException ex) {
            throw new IGFormatoException(ex, "No se pudo cargar la Instancia del Argoritmo de encripci\u00F3n para las claves", "Comuniquese con el proveedor " + ex.toString());
        } catch (InvalidKeyException ex) {
            throw new IGFormatoException(ex, "Clave Invalida", "Pruebe con otra Clave >" + ex.toString());
        } catch (InvalidKeySpecException ex) {
            throw new IGFormatoException(ex, "Clave Invalida", "Pruebe con otra Clave >" + ex.toString());
        } catch (ClassNotFoundException ex) {
            throw new IGFormatoException(ex, "No se pudo cargar el driver para la fuente de datos", "Verifique el Driver >" + ex.toString());
        } catch (SQLException ex) {
            throw new IGFormatoException(ex, "No se pudo conectar con la Base de Datos maestra", "Verifique que la Base de Datos este disponible >" + ex.toString());
        } catch (Exception ex) {
            throw new IGFormatoException(ex, "No se pudo conectar con la Base de Datos maestra", "Comuniquese con el Porveedor >" + ex.toString());
        }
    }

    public void setAutoCommit(boolean b) throws IGFormatoException {
        try {
            conectionMaster.setAutoCommit(b);
        } catch (Exception e) {
            throw new IGFormatoException(e, "No se pudo cambia el estado de la conexion para manejar transacciones", "Espere un momento e intente nuevamente " + e.toString());
        } catch (Throwable e) {
            throw new IGFormatoException(e, "No se pudo cambia el estado de la conexion para manejar transacciones", "Espere un momento e intente nuevamente " + e.toString());
        }
    }

    public void commit() throws IGFormatoException {
        try {
            conectionMaster.commit();
        } catch (Exception e) {
            throw new IGFormatoException(e, "No se pudo almcenar los cambios", "Posible error con la base de datos " + e.toString());
        } catch (Throwable e) {
            throw new IGFormatoException(e, "No se pudo almcenar los cambios", "Posible error con la base de datos " + e.toString());
        }
    }

    public void rollback() throws IGFormatoException {
        try {
            conectionMaster.rollback();
        } catch (Exception e) {
            throw new IGFormatoException(e, "No se pudo almcenar los cambios", "Posible error con la base de datos " + e.toString());
        } catch (Throwable e) {
            throw new IGFormatoException(e, "No se pudo almcenar los cambios", "Posible error con la base de datos " + e.toString());
        }
    }

    public void closeConnectionMaster() {
        try {
            this.conectionMaster.close();
        } catch (Exception e) {
            System.out.println("Error closing ConnectionMaster");
        }
    }

    public static MasterConnection getMasterConnection() {
        if (instacia == null) {
            instacia = new MasterConnection();
            System.out.println("MasterConnection -> Intacia creada...");
        }
        return instacia;
    }
    private Connection conectionMaster;
    private static MasterConnection instacia = null;
}
